import { Point } from '../entity/point'

/**
 * `SVG` 传入的属性对象
 */
export interface SVGOptions {
    /**
     * `SVG` 容器的范围相对地图视图容器的大小扩展缩小区域，
     * 例如：`0.1` 表示地图视图每个方向扩大 `0.1` 倍的范围
     *
     * 默认值为 `0.1`
     */
    padding: number
}

/**
 * 此类用于地图上创建 `SVG` 标签的容器和也帮助创建 `SVG` 相关元素
 */
export interface SVG {
    readonly options: SVGOptions;

    /**
     * 根据传入 `padding` 参数创建用于绘制 `SVG` 标签的容器
     */
    new(opts: SVGOptions): SVG;

    /**
     * 根据传入的字符串，只创建标准的 `SVG` 标签元素
     */
    create: (name: string) => SVGElement;

    /**
     * 根据屏幕坐标的数组拼接类似的 `'M..L..L..'` 字符串，用于生成标签的路径数据
     */
    pointsToPath: (rings: Array<Point>, closed: boolean) => string
}
